home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 65.zip / BS1 part 65 / Delitracker v1.21.adf / Include / misc / DeliPlayer.i
Text File  |  1992-05-17  |  8KB  |  241 lines

  1. **
  2. **  $Filename: misc/DeliPlayer.i $
  3. **  $Release: 2.0 $
  4. **  $Revision: 1.03$
  5. **  $Date: 15/05/92$
  6. **
  7. **    Definitions and Macros for creating DeliTracker Playermodules
  8. **
  9. **    (C) Copyright 1991, 1992 Delirium Softdesign
  10. **        All Rights Reserved
  11. **
  12.  
  13.     IFND    DELITRACKER_PLAYER_I
  14. DELITRACKER_PLAYER_I    SET    1
  15.  
  16.     IFND EXEC_TYPES_I
  17.         INCLUDE "exec/types.i"
  18.     ENDC
  19.  
  20.     IFND UTILITY_TAGITEM_I
  21.         INCLUDE "utility/tagitem.i"
  22.     ENDC
  23.  
  24. ;----------------------------------------------------------------------------
  25. ;
  26. ; for those who don't have V37 yet!
  27. ;
  28. ;TAG_USER    EQU    $80000000
  29. ;
  30. ;ENUM        MACRO
  31. ;        IFC    '\1',''
  32. ;EOFFSET        SET 0
  33. ;        ENDC
  34. ;        IFNC    '\1',''
  35. ;EOFFSET        SET \1
  36. ;        ENDC
  37. ;        ENDM
  38. ;
  39. ;EITEM        MACRO
  40. ;\1        EQU    EOFFSET
  41. ;EOFFSET        SET EOFFSET+1
  42. ;        ENDM
  43. ;
  44. ;----------------------------------------------------------------------------
  45.  
  46.  
  47. DELIVERSION    EQU    12            ; Current Version of DeliTracker
  48.  
  49. ;---------------------------- Function Offsets ------------------------------
  50.  
  51.  STRUCTURE DeliTrackerPlayer,0
  52.  
  53.     STRUCT    dtp_RTS_code,4            ; RTS for security (private !)
  54.     STRUCT    dtp_ID,8            ; Identifier (private !)
  55.     APTR    dtp_TagArray            ; pointer to TagItem array
  56.     LABEL    dtp_SIZEOF
  57.  
  58. * The TagItem ID's (ti_Tag values) for the player interface follow.
  59.  
  60. DTP_TagBase    EQU    TAG_USER+"DT"
  61.  
  62.     ENUM    DTP_TagBase            ; TagBase
  63.  
  64.     EITEM    DTP_InternalPlayer        ; PRIVATE !!!
  65.     EITEM    DTP_CustomPlayer        ; player is a customplayer
  66.  
  67.     EITEM    DTP_RequestDTVersion        ; minimum DeliTracker version needed
  68.     EITEM    DTP_RequestV37            ; Player needs at least Kick 2.04
  69.  
  70.     EITEM    DTP_PlayerVersion        ; actual player version
  71.     EITEM    DTP_PlayerName            ; name of this player
  72.     EITEM    DTP_Creator            ; misc string
  73.  
  74.     EITEM    DTP_Check1            ; Check Format before loading
  75.     EITEM    DTP_Check2            ; Check Format after file is loaded
  76.     EITEM    DTP_ExtLoad            ; Load additional files
  77.     EITEM    DTP_Interrupt            ; Interrupt routine
  78.     EITEM    DTP_Stop            ; Clear Patterncounter
  79.     EITEM    DTP_Config            ; Config Player
  80.     EITEM    DTP_UserConfig            ; User-Configroutine
  81.     EITEM    DTP_SubSongRange        ; Get min&max subsong number
  82.  
  83.     EITEM    DTP_InitPlayer            ; Initialisize the Player
  84.     EITEM    DTP_EndPlayer            ; Player clean up
  85.     EITEM    DTP_InitSound            ; Soundinitialisation routine
  86.     EITEM    DTP_EndSound            ; End sound
  87.     EITEM    DTP_StartInt            ; Start interrupt
  88.     EITEM    DTP_StopInt            ; Stop interrupt
  89.  
  90.     EITEM    DTP_Volume            ; Set Volume
  91.     EITEM    DTP_Balance            ; Set Balance
  92.     EITEM    DTP_Faster            ; Incease playspeed
  93.     EITEM    DTP_Slower            ; Decrease playspeed
  94.     EITEM    DTP_NextPatt            ; Jump to next pattern
  95.     EITEM    DTP_PrevPatt            ; Jump to previous pattern
  96.     EITEM    DTP_NextSong            ; Play next subsong
  97.     EITEM    DTP_PrevSong            ; Play previous subsong
  98.  
  99. *** end of player interface enumeration ***
  100.  
  101.  
  102. ;--------------------------------- Header -----------------------------------
  103. ;
  104. ; Here is the MACRO for creating the header structure. Use this MACRO !!!
  105. ;
  106.  
  107. PLAYERHEADER    MACRO
  108.     moveq    #-1,d0            ; this should return an error
  109.     rts                ; in case someone tried to run it
  110.     dc.b    'DELIRIUM'        ; identifier
  111.     dc.l    \1            ; ^tagitem array
  112.     ENDM
  113.  
  114.  
  115.     ;------ When a subroutine in the player is called, A5 will contain
  116.     ;------ the pointer to the DeliTrackerGlobals, the only exeption is
  117.     ;------ of course the interrupt routine.
  118.     ;------ The interruptroutine is called every 1/50 sec (via timerint).
  119.  
  120.     ;------ When Check is called, supply d0=0 if the format is ok
  121.     ;------ else d0<>0.
  122.  
  123.     ;------ Check 1 is called before loading the complete file,
  124.     ;------ you can check in the first 1024 Bytes of the file,
  125.     ;------ if the file is smaller than 1kB, the remaining space
  126.     ;------ will contain zero.
  127.  
  128.     ;------ Check 2 is called after the complete file is loaded,
  129.     ;------ you can use dtg_ChkSize to determine the lenght of the file.
  130.     ;------ If you supply this tag the file can be crunched.
  131.  
  132.     ;------ ExtLoad: routine for loading additional files (instruments).
  133.     ;------    If successful, you must return d0=0 else d0<>0.
  134.  
  135.     ;------    InitPlayer: Here you should allocate the audio channels.
  136.     ;------ In case the player supports multi-modules, you must set here
  137.     ;------ dtg_SndNum to the minimal subsong number.
  138.     ;------ If successful, you must return d0=0 else d0<>0.
  139.  
  140.     ;------    EndPlayer: Here you should free the audio channels.
  141.  
  142.     ;------ InitSound: If you want to use the internal interrupt but don't
  143.     ;------ need the default 50 Hz frequency, you can write another
  144.     ;------ timer value into dtg_Timer.
  145.  
  146.     ;------ Volume usually only copies the values dtg_Volume, dtg_SndLBal
  147.     ;------ and dtg_SndRBal to an internal buffer. The interrupt code has
  148.     ;------ access to this buffer and can set the volume correct.
  149.  
  150.     ;------ Note: the Player can consist of more Hunks. That means you
  151.     ;------ can seperate CHIP DATA form CODE (and you should do this!).
  152.     ;------ Hint: The players are loaded via LoadSeg() so you may crunch
  153.     ;------ them with Imploder using the explode.library.
  154.  
  155.  
  156. ;---------------------------- Global Variables ------------------------------
  157.  
  158.  STRUCTURE DeliTrackerGlobals,0
  159.  
  160.     APTR    dtg_ReqBase        ; PRIVATE !!! (this may change in future!)
  161.     APTR    dtg_DOSBase        ; librarybase don't CloseLibrary()
  162.     APTR    dtg_IntuitionBase    ; librarybase "
  163.     APTR    dtg_GfxBase        ; librarybase "
  164.     APTR    dtg_GadToolsBase    : librarybase " (NULL for Kick 1.3 and below)
  165.     APTR    dtg_ReservedLibraryBase    ; reserved for future use
  166.  
  167.     APTR    dtg_DirArrayPtr        ; Ptr to the directory of the current module
  168.     APTR    dtg_FileArrayPtr    ; Ptr to the filename of the current module
  169.     APTR    dtg_PathArrayPtr    ; Ptr to PathArray (e.g used in LoadFile())
  170.  
  171.     APTR    dtg_ChkData        ; pointer to the module to be checked
  172.     ULONG    dtg_ChkSize        ; size of the module
  173.  
  174.     UWORD    dtg_SndNum        ; current sound number
  175.     UWORD    dtg_SndVol        ; volume (ranging from 0 to 64)
  176.     UWORD    dtg_SndLBal        ; left volume (ranging from 0 to 64)
  177.     UWORD    dtg_SndRBal        ; right volume (ranging from 0 to 64)
  178.     UWORD    dtg_LED            ; filter (0 if the LED is off)
  179.     UWORD    dtg_Timer        ; timer-value for the CIA-Timers
  180.  
  181.     FPTR    dtg_GetListData        ;
  182.     FPTR    dtg_LoadFile        ;
  183.     FPTR    dtg_CopyDir        ;
  184.     FPTR    dtg_CopyFile        ;
  185.     FPTR    dtg_CopyString        ;
  186.     FPTR    dtg_AudioAlloc        ;
  187.     FPTR    dtg_AudioFree        ;
  188.     FPTR    dtg_StartInt        ;
  189.     FPTR    dtg_StopInt        ;
  190.     FPTR    dtg_SongEnd        ; save to call from interrupt code!
  191.     FPTR    dtg_CutSuffix        ;
  192.     FPTR    dtg_SetTimer        ; PRIVATE, do not use !!!
  193.     FPTR    dtg_Reserved1        ; do not use !!!
  194.     FPTR    dtg_Reserved2        ; do not use !!!
  195.     FPTR    dtg_Reserved3        ; do not use !!!
  196.  
  197.     ; There is no dtg_SIZEOF cause ...
  198.  
  199.  
  200.     ;------ GetListData(Num:d0): This function returns the memorylocation
  201.     ;------ of a loaded file in a0 and its size in d0. Num starts with 0 
  202.     ;------ (the selected module). Example: GetListData(2) returns the
  203.     ;------ start of the third file loaded (via ExtLoad) in a0 an its size
  204.     ;------ in d0.
  205.  
  206.     ;------ LoadFile(): this function may only be called in the ExtLoad
  207.     ;------ routine. file/pathname must be in dtg_PathArrayPtr then
  208.     ;------ this function will attempt to load the file into CHIPMEM
  209.     ;------ (and DECRUNCH it). If everything went fine, d0 will be zero.
  210.     ;------ If d0 is not zero this indicates an error (e.g. read error,
  211.     ;------ not enough memory, ...). In this case DeliTracker frees all
  212.     ;------ memory used for this module.
  213.  
  214.     ;------ CopyDir(): this function copies the pathname at the end
  215.     ;------ of the string in dtg_PathArrayPtr(a5).
  216.  
  217.     ;------ CopyFile(): this function copies the filename at the end
  218.     ;------ of the string in dtg_PathArrayPtr(a5).
  219.  
  220.     ;------ CopyString(Ptr:a0): this function copies the string in a0
  221.     ;------ at the end of the string in dtg_PathArrayPtr(a5).
  222.  
  223.     ;------ AudioAlloc(): this function allocates the audiochannels.
  224.     ;------ If d0=0 all is ok, d0<>0 indicates an error.
  225.  
  226.     ;------ AudioFree(): this function frees the audiochannels allocated
  227.     ;------ with AudioAlloc().
  228.  
  229.     ;------ StartInt(): this function starts the timer-interrupt.
  230.  
  231.     ;------ StopInt(): this function stops the timer-interrupt started
  232.     ;------ with StartInt().
  233.  
  234.     ;------ SongEnd(): signal the songend to DeliTracker
  235.     ;------    This call is guaranteed to preserve all registers.
  236.  
  237.  
  238.     ENDC    ; DELITRACKER_PLAYER_I
  239.  
  240.  
  241.